MYSQL GROUP BY MAX 分数
全部标签 其他答案已过时我在文档中找到的唯一选项是ZUNIONSCORE,它很棒,但它迫使我将结果保存在某个地方,然后获取以检索它。有没有办法在Redis端进行求和而不保存结果?(从那以后我需要手动使它过期) 最佳答案 是的,您可以使用Luascripting嵌入到Redis中。 关于redis-对SortedSet中特定项的分数求和,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3247
现在我对解决方案做了一些更改。我现在想要得到的是给定键范围的键->分数对。例如:设置=[1:3,2:5,7:8,10:1]对于范围[2,8]我想得到:[2:5,7:8]如何从Redis排序集中获取最后插入的(或最后5个)项目。我尝试了zrange函数,但它在排序时考虑了分数。我能以某种方式让它们按插入时间排序吗?或者,通过key?我考虑过使用列表,但我还需要按键访问元素,这就是为什么我想使用排序集(更好的访问时间复杂度)。谢谢! 最佳答案 你可以让你的分数成为一个复合值:时间戳和原始分数的串联。插入项目时的前10位是时间戳。最后一位
在由用户提交驱动的类似Reddit的网站中,计算和维护实时故事排名的有效方法是什么?每个提交都有一定的分数,由收到的赞成票、反对票和提交时间决定。(较新的提交获得更高的排名)。虽然我有实现这背后的数学的想法,但我想知道如何最好地构建这样的东西,以便准确计算和维护提交的分数。分数重新计算是否必须是通过后台作业的定期任务,或者分数是否仅在用户操作(如投票)时重新计算。运行后台作业以定期间隔重新计算历史上每个提交的分数似乎效率非常低,而仅在赞成票/反对票/提交时重新计算分数并不能形成准确的排名系统(从那时起这样一来,一个故事就有可能在新的投票中失去得分)。Web应用程序的代码是用Node.j
我正在尝试使用带有分数的Redis排序集,按时间排序。我目前的想法是使用一个Lua脚本并打包分数字段中的时间和值,使用MessagePack(消息包).时间值取自Python中的datetime.utcnow(),如下所示:1417395600。分数几乎可以有任何类型的值(value)。所以我的问题是:是否可以打包这些值?Redis的排序集似乎仅限于float,除非我弄错了。这会保持时间顺序吗?如果您对如何执行此操作有任何其他想法,请告诉我。我强烈不希望使用另一个表来存储每个客户的分数...PS:我其实并不关心时间,我只需要分数(值)按时间排序,将排序后的集合用作排行榜。
我有一些索引(排序集)包含以时间戳作为分数排序的键名,这些索引用于搜索目的,例如一个索引苹果和一个索引红色,苹果包含引用苹果的所有键名和红色所有引用的键一个红色的东西。所有这些都是根据创建主键的时间戳排序的,所以我想用它进行搜索。对于一个字段,这不是问题,例如,我在苹果上执行zrange分页以使所有苹果都在按日期排序的分页范围内,但我的问题是当我想合并2个字段时。例如,如果想要所有的红苹果,我肯定可以做到,但我必须使用zunionstore和zrange(太长)或获取所有2索引以执行基于日期的过滤器,并且我搜索最快的解决方案这样做。感谢您的阅读:) 最佳答案
我正在编写一个搜索引擎,使用杜威十进制索书号对信息进行分类。方案如下:123.452是1的子类别。3是2的子类别。4个子类3.等这与图书馆用来对图书进行排序的编号系统相同。例如,200是宗教。210是哲学与宗教理论。211是上帝的概念。网站是一个连续的目录,从一个主题转到下一个主题。每个链接在Redis中都有一个分数(链接的DeweyDecimal调用编号)。该站点设置为每页50个链接。我有一个函数可以根据用户访问的页面计算从服务器提取的zrange。有没有一种方法可以指定一个分数并找到与该分数匹配的第一次出现的索引——这样我就不必在用户输入电话号码时遍历整个数据库来查找分数?
在Redis中,我想获取不在SortedSet中的分数的上限分数(和成员)。在Java中,有NavigableSet我们可以使用Eceiling(Ee)为了返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素则返回null。有没有办法在Redis中做同样的事情,也许使用SortedSets或其他数据结构?谢谢 最佳答案 您可以使用ZRANGEBYSCORE使用Lua脚本。想象一下下面的排序集:zaddtest1azaddtest2bzaddtest4c您有3个元素,得分分别为1、2、4,并且您想调用ceiling(3)。将以
在Django应用程序中,我使用redis维护一个全局排序集,其中存储用户ID以及自纪元以来的当前时间分数。每11分钟后,我将运行一个异步任务,将排序集修剪为仅在前10分钟内保存的值,不超过。以下会完成这个吗?我不确定边缘情况(例如,这会确保所有旧值都被删除还是会泄漏等):time_now=time.time()#currenttimesinceepochten_mins_ago=time_now-(10*60)eleven_mins_ago=time_now-(11*60)my_redis_server.zremrangebyscore(sorted_set,eleven_mins_
如何从Redis排序集中检索分数刚好小于给定分数的最高值排名?例如,假设我的排序集是:rankvaluescore1)'a'-102)'d'-43)'c'04)'b'25)'e'10具体来说,如果我得到12分,我想检索排名5。如果我得到1分,我想检索排名3。如果我得到-11分,我想什么都不找。 最佳答案 注意#1:排序集中的排名是从0开始的注意#2:您必须执行两个查询,一个用于查找元素,另一个用于获取其排名。使用redis-cli的例子:127.0.0.1:6379>ZADDz-10a-4d0c2b10e(integer)5127.
我的redis中有多个排序集。它们的键具有以下模式:user:{userId}:data其中userId是实际值。相应集合的每个成员的分数等于添加时的时间戳。现在,我试图弄清楚如何为那些在特定时间戳之前添加了至少一个成员的排序集检索Redis键(这意味着至少一个成员的分数低于以毫秒为单位的给定时间戳)。我可以通过模式检索所有的键:KEYS'user:*:data'实际上,我可以使用命令检查一个键的所需条件:ZRANGEBYSCOREuser:{userId}:data-inf{timestamp}然后检查返回数据的大小但我是否有任何方法(单行、管道命令或使用Lua脚本)仅获取排序集中至